home *** CD-ROM | disk | FTP | other *** search
-
- ; NewEx.asm 90-06-11 Version V1.1
- ;
- ; New Executeing program
- ;
- ; Written by Kjell Cederfeldt in June - 90.
- ;
- ExecBase = 4
- OpenLibrary = -408 ; exec offset OpenLibrary(libName,version)(A1,D0)
- CloseLibrary = -414 ; exec offset CloseLibrary(library)(a1)
- FindTask = -294 ; exec offset FindTask(name)(a1)
- WaitPort = -384 ; exec offset WaitPort(port)(a0)
- GetMsg = -372 ; exec offset GetMsg(port)(a0)
- ReplayMsg = -378 ; exec offset ReplayMsg(message)(a1)
- Forbid = -132 ; exec offset Forbid()
- Open = -30 ; dos offset Open(name,accessMode)(D1/D2)
- Close = -36 ; dos offset Close(file)(D1)
- Write = -48 ; dos offset Write(file,buffer,length)(d1/d2/d3)
- OutPut = -60 ; dos offset OutPut()
- Lock = -84 ; dos offset! Lock(name,mode)(d1,d2)
- UnLock = -90 ; dos offset! UnLock(lock)(d1)
- Examine = -102 ; dos offset! Examine(Lock,InfoBlock)(d1,d2)
- CurrentDir = -126 ; dos offset CurrentDir(lock)(d1)
- ParentDir = -210 ; dos offset! ParentDir(lock)(d1)
- Execute = -222 ; dos offset Execute(string,file,file)(D1/D2/D3)
- GetDiskObject = -78 ; icon offset GetDiskObject(name)(a0)
- FindToolType = -96 ; icon offset FindToolType(toolTypeArray,typeName)(A0/A1)
- FreeDiskObject = -90 ; icon offset FreeDiskObject(diskobj)(a0)
- Mode_old = 1005 ;
- Mode_new = 1006 ;
- Access_read = -2
-
- move.l sp,Initial_SP ;Save stackpointer
- move.l a0,Filename ;CLI=true save address to argument
- sub.l #1,d0 ;decrement lenth with 1
- add.l d0,a0 ;Add lenth to address
- move.b #0,(a0) ;clear last byte (CLI=0A)
- move.l #0,RetCode ;clear Returncode
-
- START: move.l ExecBase,a6
- suba.l a1,a1 ;Find this Task
- jsr Findtask(a6)
- move.l d0,a4 ;Save strukture in a4
- tst.l $ac(a4) ;CLI or WB ?
- bne CliStart ;
-
-
- ; ** This only when start from WB
-
-
- move.l #49,RetCode ;Set Returncode
- lea $5c(a4),a0 ;WBench message
- jsr WaitPort(a6) ;wait
- jsr GetMsg(a6) ;load message
- move.l d0,Message ;save pointer to WBMessage
- beq Slut ;error!
-
- move.l #48,RetCode ;Set Returncode
- move.l Message,a0 ;Pointer to WBMessage
- move.l $24(a0),a0 ;Argumentlist
- beq Slut2 ;no agument
-
- CliStart:
-
-
- ; Open icon.library
-
- move.l #47,RetCode ;Set Returncode
- lea Iconname(pc),a1 ;Load address of IconName in a1
- clr.l d0 ;all version
- jsr OpenLibrary(a6) ;open iconlibrary
- move.l d0,Iconbase ;Save Iconbase
- beq Error1 ;branch if error!
-
-
- ; open dos.library
-
- move.l #46,RetCode ;Set Returncode
- lea Dosname(pc),a1 ;Load address of DosName in a1
- clr.l d0 ;all dosversion
- jsr OpenLibrary(a6) ;open doslibrary
- move.l d0,Dosbase ;Save Dosbase
- beq Error2 ;branch if error!
-
-
- jsr PointTOCLI ;Get CLI pointer
-
- tst.l Message ;if start from CLI
- beq InFileOpen ;branch to FileOpens
-
- ; set Current directory
-
- move.l #45,RetCode ;Set Returncode
- move.l Message,a0 ;Pointer to WBMessage sm_ArgList
- move.l $24(a0),a0 ;move pointer to wa_Lock
- beq Error3 ;Error!
-
- move.l (a0),d1 ;D1 => Lock
- move.l Dosbase,a6
- jsr CurrentDir(a6) ;Lock Current Dir
-
- ; Get diskobject (.info file)
-
- move.l #44,RetCode ;Set Returncode
- move.l Message,a0
- move.l $24(a0),a0
- move.l 4(a0),a0 ;move pointer to wa_Name
- move.l a0,Filename
- move.l Iconbase,a6
- jsr GetDiskObject(a6) ;Get diskobject
- move.l d0,Diskobj ;Save diskobject
- beq Error3 ;Error!
- move.l d0,a1
- move.l $36(a1),a1 ;pointer to ToolType Array
- move.l a1,toolTypeArray ;save pointer
-
-
-
- ; *** Get argument from tool icon (tooltype)
-
- move.l Iconbase,a6
- move.l toolTypeArray,a0
- move.l #typeName1,a1
- jsr FindToolType(a6)
- move.l d0,Inname
-
- move.l toolTypeArray,a0
- move.l #typeName2,a1
- jsr FindToolType(a6)
- move.l d0,Outname
-
-
- ; open outfile
- move.l #43,RetCode ;Set Returncode
- move.l DosBase,a6 ;Load dosbase
- move.l Outname,d1 ;Get filename
- move.l #Mode_new,d2 ;1006=NewFile: 1005=Existing file
- jsr Open(a6) ;open file
- move.l d0,Outhandle ;Save filehandler
- beq Error3 ;Branch if error!
-
- ;-------
- ; open readfile
- ;-------
- InFileOpen:
-
- move.l #42,RetCode ;Set Returncode
- move.l Filename,d1 ;Load filename
- tst.l Message ;test if Start WB or CLI?
- beq.s InopLab ;Branch, if CLI
- move.l Inname,d1 ;Load filename
- InOpLab: move #Mode_old,d2 ;1005=Existing file : 1006=NewFile
- move.l DosBase,a6 ;Load dosbase
- jsr Open(a6) ;open file
- move.l d0,Inhandle ;Save filehandlern
- bne BldPath ;Branch if NOT error!
-
- tst.l Message ;test Start WB or CLI?
- bne.s Err ;Branch, if WB
- move.l CLIpoint,d1
- move.l #Textfld,d2
- move.l #84,d3
- jsr Write(a6)
- Err: bra Error4
-
-
- ; Get and build pathway.
-
- BldPath: jsr GetPath ;build path
-
-
- Skriv: ; Only for bebuging (not used in program)
- move.l Dosbase,a6
- ; move.l CLIpoint,d1
- ; tst.l Message ;test if Start WB or CLI?
- ; beq.s Skr ;Branch to End if CLI
- ; move.l Outhandle,d1
- ;Skr: move.l #path,d2
- ; move.l #255,d3 ;string length
- ; jsr Write(a6)
- ;--------
- ; call Execute (dosfunction)
- ;--------
- move.l #0,RetCode ;clear Returncode
- move.l CLIPoint,d3
-
- tst.l Message ;test if Start WB or CLI?
- beq.s Exlabel ;Branch to End if CLI
-
- move.l Outhandle,d3 ;Get file handler
- Exlabel: move.l PathStart,d1 ;get pointer of string
- move.l InHandle,d2 ;get file handler
- jsr Execute(a6) ;exectue a scripfile (dos)
-
-
- ;---------
- ; Close files
- ;---------
-
- Cleanup1: move.l Inhandle,d1
- jsr Close(a6)
-
- Error4: tst.l Message ;test if Start WB or CLI?
- beq.s temp ;Branch to End if CLI
-
- move.l Outhandle,d1
- jsr Close(a6)
-
-
- Error3: move.l Iconbase,a6 ;Load Iconbase
- move.l Diskobj,a0 ;Get diskobject strukture
- jsr FreeDiskobject(a6) ;Free Diskobjec
-
- temp: move.l Dosbase,a1 ;Load Dosbase
- move.l Execbase,a6
- jsr CloseLibrary(a6) ;Close Doslibrary:
-
- Error2: move.l Iconbase,a1 ;Load IconBase
- move.l Execbase,a6
- jsr CloseLibrary(a6) ;Close Iconlibrary
-
-
- Error1: tst.l Message ;Test if Start WB or CLI?
- beq.s Slut ;Branch to End if CLI
- Slut2: jsr Forbid(a6)
- move.l Message,a1
- jsr ReplayMsg(a6) ;drop struktur
-
- Slut: move.l Initial_SP,sp ;Load start stack
- clr.l d0
- move.l RetCode,d0 ;Get returncode to D0
- rts
-
- ; !! *********** System DATA ************** !!
-
- Initial_SP: dc.l 0
- RetCode: dc.l 0
- Iconbase: dc.l 0
- Dosbase: dc.l 0
- Inhandle: dc.l 0
- Outhandle: dc.l 0
- Message: dc.l 0
- Diskobj: dc.l 0
- CLIpoint: dc.l 0
- Filename: dc.l 0
- NewLock: dc.l 0
- ParLock: dc.l 0
- Inname: dc.l 0
- Outname: dc.l 0
- Pathstart: dc.l 0
- Dosname: dc.b 'dos.library',0
- align
- Iconname: dc.b 'icon.library',0
- align
- TempNamn: blk.b 32,0
- align
- Path: blk.b 255,0
- align
- typeName1: dc.b "FILENAME",0,0
- align
- typeName2: dc.b "WINDOW",0,0
- align
- Textfld: dc.b 27,"[33mNewEx Version 1.1 by Kjell Cederfeldt",13,10,10
- dc.b "No file name or file not found!",27,"[31m",13,10,10
- align
- toolTypeArray: dc.l 0
- IconText: dc.l 0
- FileInfoblock: blk.b 260,0
- align
-
- ; ReturnCode 47 = icon.library not open
- ; ReturnCode 46 = dos.library not open
- ; ReturnCode 45 = currentdir not lock
- ; ReturnCode 44 = diskobjekt not found
- ; ReturnCode 43 = outfile (device) not found
- ; ReturnCode 42 = infile (device) not found
-
- ;******************** Subrutiner ***************************************
-
- PointTOCLI:
-
- ; Output functionen point to cli-window already open if start from CLI
-
- move.l Dosbase,a6 ;pointer doslibrary
- jsr OutPut(a6) ;get output pointer to Dos!
- move.l d1,CLIpoint ;Save pointer
- rts
-
- ;***************************************************************************
-
- GetPath:
- move.l #Path,d2 ;peek on address to Path
- add.l #253,d2 ;peek on end -2
- move.l d2,PathStart ;Get start of pathstring
-
- move.l Dosbase,a6 ;Load dosbase
- move.l #Filename,d1 ;Load pointer to filename
- move.l Access_read,d2 ;read-mode only
- jsr Lock(a6) ;lock
- tst.l d0
- beq EndLoop ;No File found
- move.l d0,NewLock ;save lock
-
- MainLoop: move.l NewLock,d1 ;Get lock
- move.l #Fileinfoblock,d2 ;Get address to block
- jsr Examine(a6) ;Get fileinfo
- tst.l d0
- beq EndLoop
-
- move.l #Fileinfoblock,d2
- add.l #8,d2 ;Add offset to address
-
- clr.l d0 ;Clear counter
- move.l d2,a0 ;move filepointer to A0
- move.l #Tempnamn,a1 ;move pathpointer to A1
- Loop: move.b (a0)+,(a1)+ ;move value A0 => A1
- add.l #1,d0 ;decriment counter
-
- tst.b (a0) ;Name end? (0 terminering)
- bne.s Loop ;No branch to loop
-
- move.b #47,(a1)+ ;add '/'
- add.l #1,d0 ;decriment counter
-
- move.l Pathstart,d2 ;get Path start
- move.l d2,a0
-
- Loop2: move.b -(a1),-(a0) ;save path-stukturen to Path
- sub.l #1,d0 ;increment counter
- bne.s Loop2
-
- move.l a0,Pathstart ;save pathstart
-
- move.l NewLock,d1 ;get lock
- jsr ParentDir(a6) ;go to parent dir
- move.l d0,ParLock ;save lock
- move.l NewLock,d1 ;get lock
- jsr UnLock(a6) ;relese lock
- move.l ParLock,d0 ;get lock
- move.l d0,NewLock ;move lock
- tst.l d0 ;are we in root ?
- bne MainLoop ;No branch
-
- move.l PathStart,a1 ;get pathstart
- Kolon: cmp.b #47,(a1)+ ;found first '/'
- bne.s kolon
- move.b #58,-(a1) ;Change this to ':'
-
- move.l PathStart,a1 ;get pathstart
- move.b #34,-(a1) ;add '"'
- move.b #32,-(a1) ;add ' '
- move.b #68,-(a1) ;add 'D'
- move.b #67,-(a1) ;add 'C'
- move.l a1,PathStart ;save the new start move.l #Path,a1
- add.l #253,a1
- move.b #34,(a1)
-
- Endloop: rts
-
- ;***************************************************************************
- end
-